#include "KTaskList.h"
#include <utility>

KTaskList &KTaskList::append(TaskType &&task)
{
    if (task) {
        KLocker lock(*this);
        m_tasks.push_back(std::move(task));
    }
    return *this;
}

KTaskList &KTaskList::append(const TaskType &task)
{
    if (task) {
        KLocker lock(*this);
        m_tasks.push_back(task);
    }
    return *this;
}

void KTaskList::clear()
{
    KLocker lock(*this);
    m_tasks.clear();
}

void KTaskList::exec()
{
    std::vector<TaskType> tasks;
    {
        KLocker lock(*this);
        tasks = m_tasks;
    }
    for (auto i = tasks.cbegin(); i != tasks.cend(); ++i) {
        (*i)();
    }
}